package leetcode.interviewClassics;

import java.util.LinkedList;

/**
 * @author Cheng Jun
 * Description: 实现一个MyQueue类，该类用两个栈来实现一个队列。
 * 你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size 和 is empty 操作是合法的。
 * 你所使用的语言也许不支持栈。你可以使用 list 或者 deque（双端队列）来模拟一个栈，只要是标准的栈操作即可。
 * 假设所有操作都是有效的 （例如，一个空的队列不会调用 pop 或者 peek 操作）。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/implement-queue-using-stacks-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * <p>
 * stack 的 pop 是 pop out 词组的缩写，pop out ：弹出。后进先出
 * queue 的 pool 是 投票的意思，可以联想 站队 投票，选民就像一个队列，先到的人先投票。先进先出
 * @version 1.0
 * @date 2021/11/5 8:57
 */
public class MyQueue {

    private LinkedList<Integer> linkedList;

    /**
     * Initialize your data structure here.
     */
    public MyQueue() {
        linkedList = new LinkedList<>();
    }

    /**
     * Push element x to the back of queue.
     */
    public void push(int x) {
        linkedList.add(x);
    }

    /**
     * Removes the element from in front of queue and returns that element.
     */
    public int pop() {
        return linkedList.pop();
    }

    /**
     * Get the front element.
     */
    public int peek() {
        return linkedList.peek();
    }

    /**
     * Returns whether the queue is empty.
     */
    public boolean empty() {
        return linkedList.isEmpty();
    }
}
